package com.aaa.sql.util;

import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

/**
 * @program: mybatis
 * @description:
 * @author: 诸葛龙辰
 * @create: 2023-03-10 10:53
 * @version:
 **/
public class SqlSessionFactoryUtil {
    /**
     * 1.私有构造    防止在类中实例化对象
     */

    private SqlSessionFactoryUtil() {

    }

    /**
     * 2.私有静态属性 私有 访问在其他地方调用 静态 随着类加载产生，只产生- -次
     *
     * @return
     */
    private static SqlSessionFactory sqlSessionFactory;
    //3. 使用匿名静态块，创建工厂
    static {
        InputStream inputStream = null;
        try {
            //因为工厂类创建不是一行代码，需要多行创建，所以使用匿名静态块来创建
            inputStream = SqlSessionFactoryUtil.class.getResourceAsStream("/mybatis-config.xml");
            // 实例化工厂创建类 调用build 创建sqlSessionFactory
            sqlSessionFactory =  new SqlSessionFactoryBuilder().build(inputStream);
        } catch (Exception e) {
           e.printStackTrace();
        }finally {
            try {
                if (inputStream!= null){
                    inputStream.close();
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

    }
//3.必须提供公共的， 静态的返回sqlSessionFactory对象的方法， 如果没有 该类没有任何作用
    public  static  SqlSessionFactory  getSqlSessionFactory(){
        return  sqlSessionFactory;
    }

}
























